// 给你两个长度相同的整数数组 target 和 arr 。每一步中，你可以选择 arr 的任意 非空子数组 并将它翻转。你可以执行此过程任意次。
// 如果你能让 arr 变得与 target 相同，返回 True；否则，返回 False 。
// 若两个数组具有完全相同的元素，一定能在有限次翻转为相同的数组
// var canBeEqual = function (target, arr) {
//   // 这里两个排序可能会影响时间复杂度
//   target.sort();
//   arr.sort();
//   let flag = true;
//   for (let i = 0; i < target.length; i++) {
//     if (target[i] !== arr[i])
//       flag = false;
//   }
//   return flag;
// };

// 试着用空间换时间，时间复杂度优于上一种
var canBeEqual1 = function (target, arr) {
  let obj = {};
  for (let i = 0; i < target.length; i++) {
    if (obj.hasOwnProperty(`${target[i]}`)) {
      obj[`${target[i]}`]++;
    } else {
      obj[`${target[i]}`] = 1;
    }
  }
  for (let i = 0; i < arr.length; i++) {
    if (obj.hasOwnProperty(`${arr[i]}`)) {
      obj[`${arr[i]}`]--;
    } else {
      return false;
    }
  }
  console.log(obj);
  for (let k in obj) {
    if (obj[k] != 0) {
      return false;
    }
  }
  return true;
};
// console.log(canBeEqual1([3, 7, 9], [3, 7, 11]));
// console.log(canBeEqual1([1, 2, 3, 4], [2, 4, 1, 3]));
console.log(canBeEqual1([1, 2, 2, 3], [1, 1, 2, 3]));